#include "btl_config.h"
#include "fp_interrupt_reset.h"
#include "protocol.h"
#include "fp_log.h"
#include "fp_timer.h"

#define IO_INT_PIN IO_PORTB_01
#define MICRO_SW_TEST_PIN IO_PORTA_10

#define IO_RST_LO 0
#define IO_RST_HI 1

void fp_irq_handler(void);

#define FPS_RST_INIT()                      \
    do                                      \
    {                                       \
        gpio_set_die(IO_PORTB_00, 1);       \
        gpio_set_direction(IO_PORTB_00, 0); \
        gpio_write(IO_PORTB_00, IO_RST_LO); \
    } while (0)

#define FPS_RST_H() gpio_write(IO_PORTB_00, IO_RST_HI)
#define FPS_RST_L() gpio_write(IO_PORTB_00, IO_RST_LO)

void micro_sw_test_init(void)
{
    gpio_set_die(MICRO_SW_TEST_PIN, 1);       // 数字态 IPA2
    gpio_set_direction(MICRO_SW_TEST_PIN, 1); // 输入
    gpio_set_pull_down(MICRO_SW_TEST_PIN, 0); // 下拉关
    gpio_set_pull_up(MICRO_SW_TEST_PIN, 1);   // 上拉开
}

int micro_sw_test_get(void)
{
    return gpio_read(MICRO_SW_TEST_PIN);
}

void fp_interrupt_init(void)
{
    io_ext_interrupt_init(IO_INT_PIN, rising_edge_trigger, fp_irq_handler); // 上升沿触
}

void fp_reset_init(void)
{
    FPS_RST_INIT();
}

void reset_test();
void fp_interrupt_and_reset_init()
{
    micro_sw_test_init();
    fp_interrupt_init();
    fp_reset_init();
    // reset_test();
}

void reset_test(void)
{
    while (1)
    {
        bf_print_d("%s", __func__);
        FPS_RST_L();
        fp_timer_delay_ms(100);
        FPS_RST_H();
        fp_timer_delay_ms(100);
    }
}

void fp_reset_pull(u8 LEVEL)
{
    if (LEVEL == 0)
        FPS_RST_L();
    else
        FPS_RST_H();

    fp_timer_delay_ms(1);
}

void sched_task_loop(void);
void fp_irq_handler(void)
{
#ifdef __BFXX_FINGERPRINT__
    /* Notify that fingerprint is detected */
    // bf_print_d("%s", __func__);
    btl_sensor_int_handle();
    sched_task_loop();
#endif
}
